クエリプランを可視化するBigQuery Visualiserを使ってみる

クエリプランを可視化するBigQuery Visualiserを使ってみる

Clock Icon2021.04.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

BigQueryでクエリを実行する際にクエリプランを確認することでクエリチューニングを行いクエリを高速化することができます。その際に便利なツールとしてBigQuery Visualiser を使うことで簡単に視覚化ことができます。今回はこのツールを使ってみます。

BigQuery Visualiserとは

BigQuery VisualiserはオープンソースのツールでBigQueryで実行するジョブステージのフローを視覚化できるWebアプリケーションです。このツールを使うことでBigQueryウェブUIで確認することができるクエリプランツールよりも詳しく、また視覚化することで簡単にクエリの問題点を特定する事ができます。

An intelliJ plugin providing a UI layer for git-flow, which in itself is a collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model. - [professional-services/tools/bq-visualizer at master · GoogleCloudPlatform/professional-services · GitHub](https://github.com/GoogleCloudPlatform/professional-services/tree/master/tools/bq-visualizer

BigQuery Visualiserを使うには上記のリポジトリからソースをダウンロードしてきて使うこともできますが、今回は簡単に使ってみたいのですでに用意されているBqViz サービスを使ってみたいと思います。

BqVizへBigQueryを連携する

BqViz でBigQueryのクエリプランを表示するにはプロジェクトを連携する必要があります。

手順1)BigQuery Visualiserにアクセスすると以下の画面になるので右上のloginを押下する。

手順2)アカウントの選択画面になるので連携するアカウントを確認して問題なければそのアカウントを押下する。

手順3)確認画面が出るので許可を押下する。

手順4)許可する内容を確認して問題なければ許可を押下する。

これでBigQuery VisualiserでBigQueryで実行したクエリが表示されるようになります。 クエリを表示するにはDownload from Google Cloud > Get Projectsで対象のGCPプロジェクトを選択したあとList Jobsを押下すると最新のものから表示されます。

では実際にBigQuery Visualiserを使ってクエリプランを確認してみます。

BigQuery Visualiserでクエリプランを確認する

今回はBigQueryの一般公開データセットのGoogle Analytics Sample を使って、BigQuery について - アナリティクス ヘルプ にある複数の表を対象にクエリを作成する > 3 日間の下記のクエリを実行して、その結果を見てみます。

#standardSQL
WITH
  ga_tables AS (
  SELECT
    date,
    SUM(totals.visits) AS visits,
    SUM(totals.pageviews) AS pageviews,
    SUM(totals.transactions) AS transactions,
    SUM(totals.transactionRevenue)/1000000 AS revenue
  FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_20160801`
  GROUP BY
    date
  UNION ALL
  SELECT
    date,
    SUM(totals.visits) AS visits,
    SUM(totals.pageviews) AS pageviews,
    SUM(totals.transactions) AS transactions,
    SUM(totals.transactionRevenue)/1000000 AS revenue
  FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_20160802`
  GROUP BY
    date
  UNION ALL
  SELECT
    date,
    SUM(totals.visits) AS visits,
    SUM(totals.pageviews) AS pageviews,
    SUM(totals.transactions) AS transactions,
    SUM(totals.transactionRevenue)/1000000 AS revenue
  FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_20160803`
  GROUP BY
    date )
SELECT
  date,
  visits,
  pageviews,
  transactions,
  revenue,
FROM
  ga_tables
ORDER BY
  date ASC

先にBigQuery ウェブ UI で表示できるクエリプランを確認してみます。クエリエディタ画面下のクエリ結果にある実行の詳細を押下します。

するとクエリプランとタイムラインが表示されます。

この画面の詳細は公式にドキュメントがあるのでご確認ください。

クエリプランとタイムライン  |  BigQuery  |  Google Cloud

では同じクエリをBigQuery Visualiserにて確認してみます。Select Jobから対象のクエリを選択します。

Tree表示とTiming表示

クエリプランの表示の仕方には2パターンあります。

  • Tree表示
    • 各ステージを有向グラフで視覚化する
  • Timing表示
    • 各ステージをガントチャートで視覚化する

グラフ部分の表示の違いはありますが、他の取得できる情報はどちらも同じですので状況に応じて使いやすい方を使えば良いと思います。

Tree表示の詳細

Tree表示では有向グラフが表示できるのでその内容を見てみます。

アイコン

グラフには2種類のアイコンがありますがDBアイコンはBigQueryのテーブルを表現し、その他のアイコンはクエリステージを表現しています。

今回のクエリですと3つのBigQueryのテーブルをデータソースとし、それぞれのテーブルから抽出したデータをUNION ALLしているのが2段めと3段目になります(S00,S01,S02,S03)。そしてUNION ALLしたものから最終的な出力を行っているのがS04になります。

クエリプランの情報

グラフ下部のペインには下記のようなクエリ全体の情報が表示されます。

  • クエリの概要
    • ジョブID、プロジェクト等
  • 状態
  • SQL
  • 実行タイミング
  • 統計情報
    • 開始時間、終了時間、経過時間、スロット使用量、バイト数等
  • 設定
    • レガシーSQL、キャッシュ等

ステージ詳細・ステップ詳細

右側のペインにはステージの詳細とステップの詳細情報が表示されます。上図ではS00のステージを表示している状態です。

ステージの詳細には状態、読み込んだレコード数、書き込みバイト数、開始時間、終了時間、読み込み時間等のそのステージの情報が表示されます。

ステップの詳細にはステージ内で実行されるオペレーション(Reac,Write,Join等)ごとに処理内容が表示されます。

このステージ詳細・ステップ詳細の内容はBigQueryのドキュメントクエリプランとタイムライン の「クエリプランの情報」の項の「ステージ概要」「ステップ情報」と同一なので詳しくはドキュメントを確認してみてください。

Timing表示についてはクエリステージがガントチャートで表示される点が違うだけなので割愛します。

まとめ

BigQuery VisualiserでBigQueryで実行したクエリのクエリプランを確認してみました。BigQueryウェブUIで見る情報よりも視覚的にわかりやすいのでBigQueryを使ってみてクエリに問題がありそうな場合はBigQuery Visualiserをつかって問題点を探すことが有効だと思います。

最後まで読んで頂いてありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.